<?php 
namespace app\index\controller;
use think\Controller;
use think\Cache;
use think\Session;
use think\Cookie;
use think\Lang;
use think\Request;
use think\captcha\Captcha;
use app\index\model\Notice as NoticeModel;

class Cachex extends Controller {

    public function index() {
        "https://www.kancloud.cn/manual/thinkphp5/118131";

        var_dump(Cache::set('name', 2));

        // Cache::clear();

        Cache::inc('name');
        Cache::dec('name');
        // Cache::rm('name');

        // var_dump(Cache::pull('name')); // 移出

        var_dump(Cache::get('name', '')); // 指定默认值

        Cache::remember('name', function() { // 没有设置，有就用以前的
            return time();
        });

        var_dump(Cache::get('name'));

        $c = Cache::init();
        var_dump($c);

        Cache::tag('tag1')->set('name1', '1');
        Cache::tag('tag1')->set('name2', '2');

        Cache::tag('tag1', ['name1', 'name2']);
        Cache::clear('tag1');

        // 设置了多类型缓存格式，默认为default
        // Cache::store('file')->set('name', 3);

    }

    public function sessionx() {

        // 手动初始化session
        // Session::init([
        //     // session配置项
        // ]);

        Session::set('name', 1, 'think'); // think作用域，支持二维数组定义 user.name
        Session::get('name'); // 不存在返回null
        Session::has('name', 'think');
        Session::prefix('think'); // 指定一个作用域
        Session::delete('name', 'think');
        Session::pull('name');
        Session::clear('think'); 
        Session::flash('name', 1); // 闪存，只在下一次请求有效
        Session::flush(); // 清除当前请求有效session

    }

    public function cookiex() {

        // 手动初始化
        // Cookie::init([
        //     // cookie配置项
        // ]);
        // Cookie::prefix('think_');

        Cookie::set('name', 1, 3600);
        Cookie::has('name', 'think_'); // 指定前缀，不指定默认使用配置项的前缀名
        Cookie::get('name', 'think_');
        Cookie::delete('name', 'think_');
        Cookie::clear('think_');

    }

    public function langx() {

        Lang::setAllowLangList(['zh-cn', 'en-us']);

        // Lang::load(APP_PATH.'...'); // 自定义语言包文件位置

        $v = Lang::get('add');
        var_dump($v);

        Lang::set('sub', '减少'); // 动态设置

        var_dump(Lang::get('sub'));

        return $this->fetch();
    }

    public function pagex() {
        $notice = new NoticeModel;
        $list = $notice->paginate(10, false, [
            'query' => ['a'=>1]
        ]) // 第二个参数为手动指定总记录数，设置true时为不使用记录数
                       ->each(function($item, $key) {
                            $item->num = $key;
                            return $item;
                       });
        $this->assign('list', $list);
        $this->assign('page', $list->render());
        $this->assign('captcha_src', captcha_src());

        return $this->fetch();
    }

    public function uploadx() {
        $file = Request::instance()->file('img');

        // 验证码验证
        if(!captcha_check(Request::instance()->param('captcha'))) {
            return '验证码错误';
        }

        var_dump($file);
        // 多文件上传时，遍历以下move方法即可
        if($file) {
            $info = $file->validate(['size'=>156780,'ext'=>'jpg,png,gif','type'=>'image/jpeg'])
                         ->rule('md5') // 指定文件名加密规则，支持 md5 date sha1 或自定义规则
                         ->move(ROOT_PATH.'public'.'/uploads', '', false); // 使用原名称，并且不覆盖
            if($info) {
                var_dump($info);
                echo $info->hash('md5');
                echo $info->hash('sha1');
            } else {
                echo $file->getError();
            }
        } else {
            echo 'error';
        }
    }

    public function captcha() {
        // 建议手动生成验证码
        $captcha = new Captcha([
            'fontSize' => 24,
            'length' => 4,
            'useNoice' => false,
            'useCurve' => false,
            'fontttf' => '6.ttf',
            'codeSet' => '0123456789a',
            // 'useImgBg' => true
            // 'useZh' => true
        ]);
        return $captcha->entry(1);
    }

}